Skip to content

fix: Error thrown during dry-run#952

Merged
tridge merged 2 commits into
RsyncProject:masterfrom
userwiths:fix/single-file-dry-run
Jun 5, 2026
Merged

fix: Error thrown during dry-run#952
tridge merged 2 commits into
RsyncProject:masterfrom
userwiths:fix/single-file-dry-run

Conversation

@userwiths
Copy link
Copy Markdown
Contributor

closes: #880

get_local_name refers to 2 "modes", when the destination is a folder and when its a file.

It seems that change_dir should take into account if we are dry-running in both cases, but it was considering the option only when dest was a folder

Copy link
Copy Markdown
Contributor

@steadytao steadytao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for fixing this. Confirmed fix.

This looks like the right behavioural fix to me. The only thing I would suggest is adding a small regression test for the single-file --dry-run --mkpath case so it stays covered.

@userwiths
Copy link
Copy Markdown
Contributor Author

Not sure how things are handled here, so i used for example what i found in the testsuite. Tested with the same file on master and on this branch, and as expected it fails on master and passes here.

tridge and others added 2 commits June 5, 2026 11:29
A single-file --mkpath copy whose destination parent does not exist
failed under --dry-run: make_path() only *reports* the directories it
would create in a dry run, so change_dir#3 then tried to chdir into a
parent that isn't there and aborted with "change_dir#3 ... failed".

When the parent is genuinely missing in a dry run, skip the chdir and
mark the destination as not-yet-present (dry_run++), exactly as the
multi-file/dir-creation path already does, so the generator doesn't
probe the missing tree.  Gating it on the missing-parent case keeps an
ordinary file-to-file dry run chdir'ing into and itemizing against an
existing destination.

Fixes: RsyncProject#880

Co-authored-by: Stiliyan Tonev (Bark) <stiliyan21@gmail.com>
…-file

Covers both halves: a --mkpath file-to-file --dry-run must succeed and
match the real run (the RsyncProject#880 abort), and a plain file-to-file --dry-run
onto an existing differing destination must still itemize the real change
rather than report it as brand new.  Both compare "--dry-run -i" output
against the real run.

Co-authored-by: Stiliyan Tonev (Bark) <stiliyan21@gmail.com>
@tridge tridge force-pushed the fix/single-file-dry-run branch from 91e3f10 to 26d44f8 Compare June 5, 2026 01:31
@tridge
Copy link
Copy Markdown
Member

tridge commented Jun 5, 2026

@userwiths I did a small bit of rework of your fix, thanks for doing this!

@tridge tridge merged commit 9df00b6 into RsyncProject:master Jun 5, 2026
13 of 14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

--dry-run doesn't work with --mkpath when copying files

3 participants